package cn.windfly.don;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Properties;


/**
 * 默认从class文件夹根目录取config.properties文件中的内容<br>
 * 也可使用readProperties方法指定读取文件
 * 
 * @author DingFengHua
 * 
 */
public class DonConfig {
	static Properties properties = new Properties();

	static {
		reload();
	}

	public static void reload() {
		properties.clear();
		try {
			InputStream resourceAsStream = DonConfig.class.getClassLoader()
			.getResourceAsStream("don.properties");
			if (resourceAsStream != null) {
				properties.load(resourceAsStream);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 重新读取配置文件
	 * 
	 * @param inputStream
	 * @param isAppend
	 *            是否追加,true追加新的内容,如果key重复则value被新值覆盖.false不追加,会将之前的内容清空后再加入新内容
	 */
	public static void readProperties(InputStream inputStream, boolean isAppend) {
		try {
			if (!isAppend) {
				properties.clear();
			}
			properties.load(inputStream);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 取int型值
	 * 
	 * @param key
	 * @return 没有key返回0
	 */
	public static int getInt(String key) {
		return getInt(key, 0);
	}

	/**
	 * /** 取int型值
	 * 
	 * @param key
	 * @param defaultValue
	 *            默认值
	 * @return 没有key返回默认值
	 */
	public static int getInt(String key, int defaultValue) {
		String value = properties.getProperty(key);
		if (value == null) {
			return defaultValue;
		} else {
			return Integer.parseInt(value);
		}
	}

	/**
	 * @param key
	 * @return 无值时为null
	 */
	public static String getString(String key) {
		return properties.getProperty(key);
	}
	
	public static Properties getProperty() {
		return properties;
	}

	/**
	 * 
	 * @param key
	 * @param defaultValue
	 *            默认值
	 * @return 无值时为null
	 */
	public static String getString(String key, String defaultValue) {
		String value = properties.getProperty(key);
		if (value == null) {
			value = defaultValue;
		}
		return value;
	}

	/**
	 * 
	 * @param key
	 * @param defaultValue
	 *            默认值
	 * @return
	 */
	public static boolean getBoolean(String key, boolean defaultValue) {
		String value = properties.getProperty(key);
		if (value == null) {
			return defaultValue;
		}

		return Boolean.valueOf(value);
	}

	/**
	 * 
	 * @param key
	 * @return 找不到key则返回false
	 */
	public static boolean getBoolean(String key) {
		return getBoolean(key, false);
	}

	/**
	 * 
	 * @param key
	 * @return
	 */
	public static long getLong(String key) {
		return getLong(key, 0);

	}

	/**
	 * 
	 * @param key
	 * @param defaultValue
	 *            默认值
	 * @return
	 */
	public static long getLong(String key, long defaultValue) {
		String value = properties.getProperty(key);
		if (value == null) {
			return defaultValue;
		} else {
			return Long.parseLong(value);
		}
	}

	/**
	 * 取double值
	 * 
	 * @param key
	 * @return 返回0.0
	 */
	public static double getDouble(String key) {
		return getDouble(key, 0.0);
	}

	/**
	 * 取double值
	 * 
	 * @param key
	 * @param defaultValue
	 *            默认值
	 * @return 没有key返回默认值
	 */
	public static double getDouble(String key, double defaultValue) {
		String value = properties.getProperty(key);
		if (value == null) {
			return defaultValue;
		}
		return Double.parseDouble(value);
	}
	
	/**
	 * 返回以指定分割符分割的字符串集合
	 * @param key
	 * @param split
	 * @return
	 */
	public static List<String> getStringList(String key,String split){
		String value = properties.getProperty(key);
		if (value == null || value.isEmpty()) {
			return new ArrayList<String>();
		}
		
		if (!value.contains(split)) {
			return new ArrayList<String>(Arrays.asList(value));
		}
		
		String[] ss = value.split(split);
		return new ArrayList<String>(Arrays.asList(ss));
	}
}
